## Weight enumerator of the Hamming codes and MacWilliams identities

from PyM import *

def hamming_weight_enumerator(r,q=2):
    e = q**(r-1); f = e*q
    n = (e-1)//(q-1)
    [_,T] = polynomial_ring(Q_,'T')
    a = 1 + (q-1)*T
    return a**n * (a**e + (f-1) * (1-T)**e) // f

HWE = hamming_weight_enumerator

def macwilliams(n,k,A,q=2):
    [_,T] = polynomial_ring(Q_,'T')
    Q = QQ(_)
    a = 1 + (q-1)*T >> Q
    B = a**n * evaluate(A>>Q,[T],[(1-T)/a]) // q**k  # ??

show(HWE(3)) 

[_,T] = polynomial_ring(Q_,'T')
R = QQ(_)

B = 1+7*T**4 >> R

#show(macwilliams(7,3,B))